package cn.sfa.common.utils;

import java.util.HashMap;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;
/**
 * 
* 类名称：MajorKeyGenerate   
* 类描述：主键生成类
* 创建人：lenovo   
* 创建时间：2012-2-16 上午11:59:07   
* 修改备注：   
* @version
 */
public class MajorKeyGenerate {

	Logger log = LoggerFactory.getLogger(MajorKeyGenerate.class);
	
	NamedParameterJdbcTemplate jdbcTemplate;
	
	public NamedParameterJdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}

	public void setJdbcTemplate(NamedParameterJdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	/**
	 * 主键生成(注,默认截取长度13位,填充字符为0)
	 * @param tableNameEnum  数据库表名的枚举类
	 * @return 字符串
	 */
	public String keyGenerate(TableNameEnum tableNameEnum){
		
		return keyGenerate(tableNameEnum,"0");
	}
	
	/**
	 * 主键生成(注,默认截取长度13位)
	 * @param tableNameEnum  数据库表名的枚举类
	 * @param fillstr LPAD函数的填充字符
	 * @return 字符串
	 */
	public String keyGenerate(TableNameEnum tableNameEnum,String fillstr){
		
		return keyGenerate(tableNameEnum,"13",fillstr);
	}
	
	/**
	 * eg: select 'SAT' || LPAD(seq_saleAgentTrain.nextval,13,0) from dual
	 * eg:kid = keyGenerate(tablename,13,0);
	 * @param tableNameEnum  数据库表名的枚举类
	 * @param length 序列号的长度
	 * @param fillstr LPAD函数的填充字符
	 * @return  字符串  
	 */
	public  String keyGenerate(TableNameEnum tableNameEnum,String length,String fillstr){
		String keyValue = "";
		String seqname = "SEQ_" + tableNameEnum.name();
		String sql = "select substr('"+tableNameEnum.name()+"',3,3) || LPAD("+seqname+".nextval,"+length+","+fillstr+") as key from dual";
		
		//log.info("取序列号sql:"+sql);
		
		SqlRowSet rs = jdbcTemplate.queryForRowSet(sql,new HashMap());
		
		while(rs.next()){
			keyValue = rs.getString("KEY");
		}
		
		
		return keyValue;
	}
	
}
